const express = require('express');
// 服务器的工具类

// 约定路径只能有英文字母组成，id由英文字母和数字的组合或者纯数字组成 /user/er
const id_reg = /(\/[a-z]+)+\/(([a-z]*[\d]+)+[a-z]*)$/i
exports.id_reg = id_reg;

// 判断delete 和 put方法是否有传递id的中间件
exports.idRegMiddleWare = (req,res,next)=>{
  const method = req.method.toUpperCase(),path = req.path;
  if (method === 'DELETE' || method === 'PUT') {
    // 路径上有参数
    if(id_reg.test(path)){
      next()
      // 或者使用body传递参数批量操作
    }else if(req.body && Array.isArray(req.body.id)){
      next()
    }else{
      next(new Error('id不能为空'))
    }
  } else {
      next()
  }
} 
// 错误处理中间件
exports.errorMiddleWare = (err, req, res, next) => {
    let obj = null, errMsg = "";
    if (err instanceof Error) {
        errMsg = err.message;
    } else if (typeof err === 'string') {
        errMsg = err;
    }else{
        obj = {
            code:err.code,
            msg: err.message
        }
    }
    if(!obj){
        try {
           const errObj = JSON.parse(errMsg);
           obj = {
                code: errObj.code ,
                msg: errObj.message 
            } 
        } catch (error) {
            obj = {
                msg: errMsg 
            }
        }
    }

    if (err) {
        res.send({
            code: obj.code || 500,
            success: false,
            msg: obj.msg || '请求发生错误'
        })
    } else {
        next()
    }
}

// 异步方法报错 errorHandler 无法捕捉到，所以

// exports.routerUtil = function(){
//     return async function(){
        
//     }
// }